Skip to content

feat(web): server-load readout redesign — 7 switchable style candidates#39

Merged
DanielGGordon merged 4 commits into
mainfrom
t3code/host-stats-redesign
Jul 23, 2026
Merged

feat(web): server-load readout redesign — 7 switchable style candidates#39
DanielGGordon merged 4 commits into
mainfrom
t3code/host-stats-redesign

Conversation

@DanielGGordon

@DanielGGordon DanielGGordon commented Jul 21, 2026

Copy link
Copy Markdown
Owner

What

Redesign candidates for the sidebar server-load readout (the CPU 12% MEM 3.2/15.6G line next to Settings). The old one was tiny and colorless; this PR turns the readout into a pluggable style and ships 7 redesigns plus the original, switchable live from Settings → Features → Sidebar → Server load style (per device, default stays classic).

Each candidate was designed by a different model against the same brief (bigger, color required, load-ramped via the app's success/warning/destructive tokens, ≤ ~150×28px, both themes):

Style Model Design
signature fable-5 dot-on-track precision faders, translucent wake, 2-min peak-hold ticks
bars opus-4.8 stacked color-ramped meter bars on a shared grid
sparkline sonnet-5 live CPU history sparkline + bold hero figure
segments gpt-5.6-sol 10-cell LED meters with recent-peak afterglow
rings glm-5.2 dual donut gauges
equalizer kimi-k2.7-code 24-bar CPU history equalizer, newest emphasized
badge gemini-3.1-pro tinted status pill with (pulsing) health dot

Comparison

All shots are the live readout on this branch under generated CPU load waves, in both themes:

comparison

Full-size app context shots

Light: light-full

Dark: dark-full

Plumbing

  • sidebarHostStatsStyle client setting (contracts) + style picker row in Features settings.
  • apps/web/src/components/host-stats/ — variant registry; classic extracted from Sidebar.tsx unchanged.
  • useHostStatsWithHistory — rolling ~2-minute sample window (24 × 5s) for the history-driven styles, cached at module scope so it survives sidebar remounts (e.g. visiting Settings and coming back).
  • Fixes the pre-existing DesktopClientSettings round-trip test broken by feat(web): show dotfiles in the file explorer and allow changing its root (#33) #34 (fixture was missing fileExplorerShowDotfiles).

Picking a winner

Everything ships behind the picker, so this can merge as-is and the favorite can be promoted to default (and the rest culled) in a follow-up once you've lived with them. The screenshots under docs/host-stats-variants/ can be deleted at that point too.

🤖 Generated with Claude Code

DanielGGordon and others added 4 commits July 21, 2026 17:59
…d variants

Scaffolding for the server-load readout redesign: a sidebarHostStatsStyle
client setting, a Server load style picker in Settings -> Features, a
variant registry under components/host-stats/ (classic extracted from
Sidebar.tsx + 7 placeholder variants to be filled in by design agents),
and useHostStatsWithHistory providing a rolling 2-minute sample window
for sparkline/trend styles.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Each variant was written by a different model against the same brief
(bigger, colorful, load-ramped via success/warning/destructive tokens):

- signature  fable-5          dot-on-track precision faders + peak ticks
- bars       opus-4.8         stacked color-ramped meter bars
- sparkline  sonnet-5         CPU history sparkline + hero figure
- segments   gpt-5.6-sol      10-cell LED meters with peak afterglow
- rings      glm-5.2          dual donut gauges
- equalizer  kimi-k2.7-code   24-bar CPU history equalizer
- badge      gemini-3.1-pro   tinted status pill with pulsing dot

Also fixes the pre-existing DesktopClientSettings round-trip test broken
by #34 (fixture was missing fileExplorerShowDotfiles).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Visiting Settings unmounts the sidebar; without this the sparkline/
equalizer history restarted from one sample every time you came back.
Cache the rolling window at module scope; explicit disable still clears.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Live captures from an isolated instance under generated load waves,
8 styles x 2 themes, plus the labeled comparison sheet used in the PR.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions github-actions Bot added size:XL vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. labels Jul 21, 2026
@DanielGGordon
DanielGGordon merged commit c679200 into main Jul 23, 2026
6 of 10 checks passed
DanielGGordon added a commit that referenced this pull request Jul 23, 2026
…ff candidates (#41)

* feat(web): promote segments to default host-stats style, cull the rest

The gpt-5.6-sol "segments" LED-meter design won the PR #39 bake-off.

- DEFAULT_SIDEBAR_HOST_STATS_STYLE -> "segments"
- Remove the six losing variant components; picker now offers only
  Segments and Classic (plain text)
- Retired style ids stay decodable in the settings schema and render as
  segments, so devices that stored a bake-off value keep their settings
  instead of failing the whole-settings decode back to defaults
- Drop docs/host-stats-variants (2.7MB of comparison screenshots); the
  merged PR #39 body now pins its images to the merge commit SHA

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* feat(web): taller sidebar footer with full-height server-load readout

Feedback on the segments default: the footer row was project-row height
with the readout floating small and low.

- Footer row is now h-18 on desktop — 1.5x the 48px project rows
- Settings button squished to its content width and stretched to the
  full row height
- The readout card fills the remaining width and the full height, so
  its top edge aligns with the row; bigger cells (h-2.5) and 13px
  values at the larger size
- Mobile keeps the original compact row

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant